package main

import "fmt"

/*
调用函数时的隐式转换
Go语言中的函数调用都是值传递的，变量会在方法调用前进行类型转换。
！！！Go语言中的函数调用都是值传递的。传递的时候会进行隐式的类型转换。

*/

// 一个传入interface的打印类型方法。
func printType(i interface{}) {
	switch i.(type) {
	case int:
		fmt.Println("类型为int")
	case string:
		fmt.Println("类型为string")
	}
}

func main() {
	a := 10
	printType(a)

	// 如果把方法中的类型判断改到外边来，就会报错了。
	/*switch a.(type) {
	case int:
		fmt.Println("类型为int")
	case string:
		fmt.Println("类型为string")
	}*/

	// 将a赋值成interface就可以显式的进行处理。
	switch interface{}(a).(type) {
	case int:
		fmt.Println("类型为int")
	case string:
		fmt.Println("类型为string")
	}

}
